package model

import (
	"ginblog/utils/errmsg"
	"github.com/jinzhu/gorm"
)

type Article struct {
	Category Category `gorm:"foreignkey:Cid"` // foreignkey很关键 创建关联表
	gorm.Model
	Title   string `gorm:"type:varchar(100);not null" json:"title"`
	Cid     int    `gorm:"type:int;not null" json:"cid"` // 分类id
	Desc    string `gorm:"type:varchar(200)" json:"desc"`
	Content string `gorm:"type:longtext" json:"content"`
	Img     string `gorm:"type:varchar(100)" json:"img"`
}

// 新增分类
func CreateArt(data *Article) int {
	err := db.Create(data).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCESS
}

// 查询分类下的所有文章
func GetCateArt(pageSize, pageNum, cid int) (map[string]interface{}, int) {
	var artList []Article
	res := make(map[string]interface{})
	total := 0
	err := db.Preload("Category").Limit(pageSize).Offset((pageNum-1)*pageSize).Where("cid = ?", cid).Find(&artList).Count(&total).Error
	res["total"] = total
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, errmsg.ERROR_CARNAME_NOT_EXIST
	}
	res["data"] = artList
	return res, errmsg.SUCESS
}

// 查询单个文章
func GetArtInfo(id int) (Article, int) {
	var art Article
	err := db.Preload("Category").Where("id = ?", id).First(&art).Error
	if err != nil {
		return Article{}, errmsg.ERROR_ART_NOT_EXIST
	}
	return art, errmsg.SUCESS
}

// 查询文章列表
func GetArt(pageSize, pageNum int) ([]Article, int) {
	var art []Article
	err := db.Preload("Category").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&art).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, errmsg.ERROR
	}
	return art, errmsg.SUCESS
}

// 编辑文章
func EditArt(id int, data *Article) int {
	// 这个方式感觉很蠢

	var art Article
	var maps = make(map[string]interface{})

	// 这里赋值了的就会更新
	if data.Title != "" {
		maps["title"] = data.Title
	}
	if data.Cid != 0 {
		maps["cid"] = data.Cid
	}
	maps["desc"] = data.Title
	maps["content"] = data.Content
	maps["img"] = data.Img

	err := db.Model(&art).Where("id = ?", id).Updates(maps).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCESS
}

// 删除文章
func DeleteArt(id int) int {
	err := db.Where("id=?", id).Delete(&Article{}).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCESS
}
